'use strict'

import {app, BrowserWindow, ipcMain, protocol, session} from 'electron'
import {createProtocol} from 'vue-cli-plugin-electron-builder/lib'

const isDevelopment = process.env.NODE_ENV !== 'production'

// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
    {scheme: 'app', privileges: {secure: true, standard: true}}
])


async function createWindow() {
    // Create the browser window.
    const win = new BrowserWindow({
        frame: false,
        width: 1280,
        height: 920,
        webPreferences: {
            //webSecurity: false, // 关闭CORS验证，也会关闭其他的安全检查（跨域）
            nodeIntegration: true,
            contextIsolation: false,//eslint-disable-next-line

            // Use pluginOptions.nodeIntegration, leave this alone
            // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
            //nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
            //contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
            //preload: "./preload2.js",
        }
    });

    /*win.webContents.session.webRequest.onBeforeSendHeaders(
        (details, callback) => {
            let kugouIndex = details.url.indexOf("/kugou/");
            if (kugouIndex > -1) {
                let kugou = details.url.slice(kugouIndex);
                details.url = kugou.replace('/kugou/', 'https://m.kugou.com/');
                dialogInfo(details.url)
            }
            let TKugouIndex = details.url.indexOf("/TKugou/");
            if (TKugouIndex > -1) {
                let TKugou = details.url.slice(TKugouIndex);
                details.url = TKugou.replace('/TKugou/', 'http://mobilecdnbj.kugou.com/');
                dialogInfo(details.url)
            }
        },
    );*/

    if (process.env.WEBPACK_DEV_SERVER_URL) {
        // Load the url of the dev server if in development mode
        await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
        if (!process.env.IS_TEST) win.webContents.openDevTools()
    } else {
        createProtocol('app')
        // Load the index.html when not in development
        win.loadURL('app://./index.html')
        //win.loadURL('http://localhost:8080')
    }

    // 1. 窗口 最小化
    ipcMain.on('window-min', function () { // 收到渲染进程的窗口最小化操作的通知，并调用窗口最小化函数，执行该操作
        win.minimize();
    })

    // 2. 窗口 最大化、恢复
    ipcMain.on('window-max', function () {
        if (win.isMaximized()) { // 为true表示窗口已最大化
            win.restore();// 将窗口恢复为之前的状态.
        } else {
            win.maximize();
        }
    })

    // 3. 关闭窗口
    ipcMain.on('window-close', function () {
        app.quit();
    })

    // 4. 强制关闭
    ipcMain.on('window-exit', function () {
        app.exit();
    })

    const {session} = require('electron');
    //const filter = {urls: ['*/kugou/*', '*/TKugou/*']}
    // 在发出 HTTP 请求前（onBeforeSendHeaders），修改请求的 HTTP Header，在其中加入 Origin: ‘*’
    session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
        details.requestHeaders['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0';
        callback({requestHeaders: {Origin: '*', ...details.requestHeaders}});
    })
    // 在收到 HTTP 回复后（onHeadersReceived），修改回复的 HTTP Header，在其中加入 'Access-Control-Allow-Origin': ['*’]
    session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
        details.responseHeaders['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0';
        callback({responseHeaders: {'Access-Control-Allow-Origin': ['*'], ...details.responseHeaders,},});
    })

    require("@/electron/music");
}

// Quit when all windows are closed.
app.on('window-all-closed', () => {
    // On macOS it is common for applications and their menu bar
    // to stay active until the user quits explicitly with Cmd + Q
    if (process.platform !== 'darwin') {
        app.quit()
    }
})

app.on('activate', () => {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
})

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', async () => {
    /*if (isDevelopment && !process.env.IS_TEST) {
      // Install Vue Devtools
      try {
        await installExtension(VUEJS3_DEVTOOLS)
      } catch (e) {
        console.error('Vue Devtools failed to install:', e.toString())
      }
    }*/
    createWindow()
})

// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
    if (process.platform === 'win32') {
        process.on('message', (data) => {
            if (data === 'graceful-exit') {
                app.quit()
            }
        })
    } else {
        process.on('SIGTERM', () => {
            app.quit()
        })
    }
}
